home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cdity / ModeProSrc.lha / Daemon / ptOpenNodes.c < prev    next >
C/C++ Source or Header  |  2000-03-29  |  2KB  |  146 lines

  1. #include "MP.h"
  2. #include "patchdata.h"
  3.  
  4. //#define DEBUG
  5. #include <debug.h>
  6. //#define ADD_DEBUG_CODE
  7.  
  8. extern BOOL   V39;
  9. extern struct MPSem *MPSem;
  10.  
  11.  
  12. void PreCloseOpenNode(struct OpenNode *on)
  13. {
  14.   if(V39)
  15.   {
  16.     LONG l;
  17.     struct ColorMap *cm;
  18.     
  19.     cm=on->Screen->ViewPort.ColorMap;
  20.     
  21.     for(l=0;l<MAX_ONPENS;l++)
  22.     {
  23.      
  24.       if(on->ObtainedPens[l])
  25.       {
  26.         ReleasePen(cm,l);
  27.       }
  28.     }
  29.   }
  30. }
  31.  
  32. void FreeOpenNode(struct OpenNode *on)
  33. {
  34. #ifdef ADD_DEBUG_CODE  
  35.   if(MPSem->Debug)
  36.   {
  37.     KP("--------------------------------\nFreeOpenNode(%8lx)\n",on);
  38.   }
  39. #endif
  40.   if(on) 
  41.   { 
  42.     /* All these are safe to call with NULL */
  43.     FreeVec(on->TA.tta_Name);
  44.     FreeVec(on->TA.tta_Tags);
  45.     DeleteCxObjAll(on->Cx);
  46.     FreeVec(on->HotKey);
  47.     FreeVec(on->ScreenTitle);
  48.     if(V39)
  49.     {
  50.       //LONG l; // 4.55 @2 Comment out
  51.       FreeBitMap(on->BitMap);
  52.      
  53.      // Commented out in 4.50 duplicate from above
  54.      /*
  55.       for(l=0;l<MAX_ONPENS;l++)
  56.       {
  57.         struct ColorMap *cm;
  58.       
  59.         cm=on->Screen->ViewPort.ColorMap;
  60.  
  61.         if(on->ObtainedPens[l])
  62.         {
  63.           ReleasePen(cm,l);
  64.         }
  65.       }
  66.       */
  67.     }
  68.     
  69.     FreeDNode(on->DN);
  70.     FreeVec(on);
  71.  
  72. #ifdef ADD_DEBUG_CODE  
  73.     if(MPSem->Debug)
  74.     {
  75.       KP("  Freed\n");
  76.     }
  77. #endif
  78.   }
  79. }
  80.  
  81. void FreeWBOpenNode(void)
  82. {
  83.   struct OpenNode *on;
  84.  
  85. #ifdef ADD_DEBUG_CODE  
  86.   if(MPSem->Debug)
  87.   {
  88.     KP("--------------------------------\nFreeWBOpenNode()\n");
  89.   }
  90. #endif
  91.  
  92.   on=(struct OpenNode *)MPSem->OpenList.lh_Head;
  93.   while(on->on_Node.ln_Succ)
  94.   {
  95.     if((on->Flags & ON_WORKBENCH))
  96.     {
  97.       Remove((struct Node *)on);
  98.       FreeOpenNode(on);
  99.       return;
  100.     }
  101.     on=(struct OpenNode *)on->on_Node.ln_Succ;
  102.   }
  103. #ifdef ADD_DEBUG_CODE  
  104.   if(MPSem->Debug)
  105.   {
  106.     KP("  Not Freed\n");
  107.   }
  108. #endif
  109. }
  110.  
  111.  
  112. void PreCloseWBOpenNode(void)
  113. {
  114.   struct OpenNode *on;
  115.  
  116.   on=(struct OpenNode *)MPSem->OpenList.lh_Head;
  117.   while(on->on_Node.ln_Succ)
  118.   {
  119.     if((on->Flags & ON_WORKBENCH))
  120.     {
  121.       PreCloseOpenNode(on);
  122.       return;
  123.     }
  124.     on=(struct OpenNode *)on->on_Node.ln_Succ;
  125.   }
  126. }
  127.  
  128. // 4.53 @2
  129. // NOTE: doesn't obtain sem
  130. struct OpenNode *FindOpenNode(struct Screen *Scr)
  131. {
  132.   struct OpenNode *on;
  133.   
  134.   on=(struct OpenNode *)MPSem->OpenList.lh_Head;
  135.   while(on->on_Node.ln_Succ)
  136.   {
  137.     if(on->Screen==Scr)
  138.     {
  139.       return(on);
  140.     }
  141.     on=(struct OpenNode *)on->on_Node.ln_Succ;
  142.   }
  143.  
  144.   return(0);
  145. }
  146.